home *** CD-ROM | disk | FTP | other *** search
/ By Popular Request 2.0 / By Popular Request 2.0 (Arsenal Computer).ISO / amiga_1 / atcpsd40.lha / AmiTCP-4.0-gcc / netinclude / net / route.h < prev    next >
C/C++ Source or Header  |  1995-06-04  |  7KB  |  206 lines

  1. /*
  2.  * Copyright (c) 1980, 1986 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms are permitted
  6.  * provided that the above copyright notice and this paragraph are
  7.  * duplicated in all such forms and that any documentation,
  8.  * advertising materials, and other materials related to such
  9.  * distribution and use acknowledge that the software was developed
  10.  * by the University of California, Berkeley.  The name of the
  11.  * University may not be used to endorse or promote products derived
  12.  * from this software without specific prior written permission.
  13.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  14.  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  15.  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  16.  *
  17.  *    @(#)route.h     7.4 (Berkeley) 6/27/88
  18.  */
  19.  
  20. /*
  21.  * Kernel resident routing tables.
  22.  *
  23.  * The routing tables are initialized when interface addresses
  24.  * are set by making entries for all directly connected interfaces.
  25.  */
  26.  
  27. /*
  28.  * A route consists of a destination address and a reference
  29.  * to a routing entry.    These are often held by protocols
  30.  * in their control blocks, e.g. inpcb.
  31.  */
  32. struct route {
  33.     struct    rtentry *ro_rt;
  34.     struct    sockaddr ro_dst;
  35. };
  36.  
  37. /*
  38.  * We distinguish between routes to hosts and routes to networks,
  39.  * preferring the former if available.    For each route we infer
  40.  * the interface to use from the gateway address supplied when
  41.  * the route was entered.  Routes that forward packets through
  42.  * gateways are marked so that the output routines know to address the
  43.  * gateway rather than the ultimate destination.
  44.  */
  45. struct rtentry {
  46.     u_long    rt_hash;        /* to speed lookups */
  47.     struct    sockaddr rt_dst;    /* key */
  48.     struct    sockaddr rt_gateway;    /* value */
  49.     short    rt_flags;        /* up/down?, host/net */
  50.     short    rt_refcnt;        /* # held references */
  51.     u_long    rt_use;         /* raw # packets forwarded */
  52.     struct    ifnet *rt_ifp;        /* the answer: interface to use */
  53. };
  54.  
  55. #define RTF_UP        0x1        /* route useable */
  56. #define RTF_GATEWAY    0x2        /* destination is a gateway */
  57. #define RTF_HOST    0x4        /* host entry (net otherwise) */
  58. #define RTF_DYNAMIC    0x10        /* created dynamically (by redirect) */
  59. #define RTF_MODIFIED    0x20        /* modified dynamically (by redirect) */
  60.  
  61. /*
  62.  * Routing statistics.
  63.  */
  64. struct    rtstat {
  65.     short    rts_badredirect;    /* bogus redirect calls */
  66.     short    rts_dynamic;        /* routes created by redirects */
  67.     short    rts_newgateway;     /* routes modified by redirects */
  68.     short    rts_unreach;        /* lookups which failed */
  69.     short    rts_wildcard;        /* lookups satisfied by a wildcard */
  70. };
  71.  
  72. #ifdef KERNEL
  73. #define RTFREE(rt) \
  74.     if ((rt)->rt_refcnt == 1) \
  75.         rtfree(rt); \
  76.     else \
  77.         (rt)->rt_refcnt--;
  78.  
  79. #ifdef    GATEWAY
  80. #define RTHASHSIZ    64
  81. #else
  82. #define RTHASHSIZ    8
  83. #endif
  84. #if    (RTHASHSIZ & (RTHASHSIZ - 1)) == 0
  85. #define RTHASHMOD(h)    ((h) & (RTHASHSIZ - 1))
  86. #else
  87. #define RTHASHMOD(h)    ((h) % RTHASHSIZ)
  88. #endif
  89. struct    mbuf *rthost[RTHASHSIZ];
  90. struct    mbuf *rtnet[RTHASHSIZ];
  91. struct    rtstat    rtstat;
  92.  
  93. #endif
  94.  
  95. #ifdef __AMITCP__
  96. /*
  97.  * These numbers are used by reliable protocols for determining
  98.  * retransmission behavior and are included in the routing structure.
  99.  */
  100. struct rt_metrics {
  101.     u_long    rmx_locks;    /* Kernel must leave these values alone */
  102.     u_long    rmx_mtu;    /* MTU for this path */
  103.     u_long    rmx_hopcount;    /* max hops expected */
  104.     u_long    rmx_expire;    /* lifetime for route, e.g. redirect */
  105.     u_long    rmx_recvpipe;    /* inbound delay-bandwith product */
  106.     u_long    rmx_sendpipe;    /* outbound delay-bandwith product */
  107.     u_long    rmx_ssthresh;    /* outbound gateway buffer limit */
  108.     u_long    rmx_rtt;    /* estimated round trip time */
  109.     u_long    rmx_rttvar;    /* estimated rtt variance */
  110. };
  111.  
  112. /*
  113.  * rmx_rtt and rmx_rttvar are stored as microseconds;
  114.  * RTTTOPRHZ(rtt) converts to a value suitable for use
  115.  * by a protocol slowtimo counter.
  116.  */
  117. #define RTM_RTTUNIT    1000000 /* units for rtt, rttvar, as units per sec */
  118. #define RTTTOPRHZ(r)    ((r) / (RTM_RTTUNIT / PR_SLOWHZ))
  119.  
  120. #define RTF_UP        0x1        /* route useable */
  121. #define RTF_GATEWAY    0x2        /* destination is a gateway */
  122. #define RTF_HOST    0x4        /* host entry (net otherwise) */
  123. #define RTF_REJECT    0x8        /* host or net unreachable */
  124. #define RTF_DYNAMIC    0x10        /* created dynamically (by redirect) */
  125. #define RTF_MODIFIED    0x20        /* modified dynamically (by redirect) */
  126. #define RTF_DONE    0x40        /* message confirmed */
  127. #define RTF_MASK    0x80        /* subnet mask present */
  128. #define RTF_CLONING    0x100        /* generate new routes on use */
  129. #define RTF_XRESOLVE    0x200        /* external daemon resolves name */
  130. #define RTF_LLINFO    0x400        /* generated by ARP or ESIS */
  131. #define RTF_PROTO2    0x4000        /* protocol specific routing flag */
  132. #define RTF_PROTO1    0x8000        /* protocol specific routing flag */
  133.  
  134. /*
  135.  * Following structure necessary for 4.3 compatibility;
  136.  * We should eventually move it to a compat file.
  137.  */
  138. struct ortentry {
  139.     u_long    rt_hash;        /* to speed lookups */
  140.     struct    sockaddr rt_dst;    /* key */
  141.     struct    sockaddr rt_gateway;    /* value */
  142.     short    rt_flags;        /* up/down?, host/net */
  143.     short    rt_refcnt;        /* # held references */
  144.     u_long    rt_use;         /* raw # packets forwarded */
  145.     char    rt_pad[4];
  146.     struct    ifnet *rt_ifp;        /* the answer: interface to use */
  147. };
  148. /*
  149.  * Structures for routing messages.
  150.  */
  151. struct rt_msghdr {
  152.     u_short rtm_msglen;    /* to skip over non-understood messages */
  153.     u_char    rtm_version;    /* future binary compatability */
  154.     u_char    rtm_type;    /* message type */
  155.     u_short rtm_index;    /* index for associated ifp */
  156.     pid_t    rtm_pid;    /* identify sender */
  157.     int    rtm_addrs;    /* bitmask identifying sockaddrs in msg */
  158.     int    rtm_seq;    /* for sender to identify action */
  159.     int    rtm_errno;    /* why failed */
  160.     int    rtm_flags;    /* flags, incl. kern & message, e.g. DONE */
  161.     int    rtm_use;    /* from rtentry */
  162.     u_long    rtm_inits;    /* which metrics we are initializing */
  163.     struct    rt_metrics rtm_rmx; /* metrics themselves */
  164. };
  165.  
  166. struct route_cb {
  167.     int    ip_count;
  168.     int    ns_count;
  169.     int    iso_count;
  170.     int    any_count;
  171. };
  172.  
  173. #define RTM_VERSION    2    /* Up the ante and ignore older versions */
  174.  
  175. #define RTM_ADD     0x1    /* Add Route */
  176. #define RTM_DELETE    0x2    /* Delete Route */
  177. #define RTM_CHANGE    0x3    /* Change Metrics or flags */
  178. #define RTM_GET     0x4    /* Report Metrics */
  179. #define RTM_LOSING    0x5    /* Kernel Suspects Partitioning */
  180. #define RTM_REDIRECT    0x6    /* Told to use different route */
  181. #define RTM_MISS    0x7    /* Lookup failed on this address */
  182. #define RTM_LOCK    0x8    /* fix specified metrics */
  183. #define RTM_OLDADD    0x9    /* caused by SIOCADDRT */
  184. #define RTM_OLDDEL    0xa    /* caused by SIOCDELRT */
  185. #define RTM_RESOLVE    0xb    /* req to resolve dst to LL addr */
  186.  
  187. #define RTV_MTU     0x1    /* init or lock _mtu */
  188. #define RTV_HOPCOUNT    0x2    /* init or lock _hopcount */
  189. #define RTV_EXPIRE    0x4    /* init or lock _hopcount */
  190. #define RTV_RPIPE    0x8    /* init or lock _recvpipe */
  191. #define RTV_SPIPE    0x10    /* init or lock _sendpipe */
  192. #define RTV_SSTHRESH    0x20    /* init or lock _ssthresh */
  193. #define RTV_RTT     0x40    /* init or lock _rtt */
  194. #define RTV_RTTVAR    0x80    /* init or lock _rttvar */
  195.  
  196. #define RTA_DST     0x1    /* destination sockaddr present */
  197. #define RTA_GATEWAY    0x2    /* gateway sockaddr present */
  198. #define RTA_NETMASK    0x4    /* netmask sockaddr present */
  199. #define RTA_GENMASK    0x8    /* cloning mask sockaddr present */
  200. #define RTA_IFP     0x10    /* interface name sockaddr present */
  201. #define RTA_IFA     0x20    /* interface addr sockaddr present */
  202. #define RTA_AUTHOR    0x40    /* sockaddr for author of redirect */
  203.  
  204. #endif
  205.  
  206.